package com.nowcoder.community.dao;

import com.nowcoder.community.entity.Message;
import com.nowcoder.community.service.MessageService;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface MessageMapper {

    /**
     * 查询当前用户的会话列表，针对每一个会话只返回一个最新的私信
     * @param userId 当前的用户的的id，他的会话
     * @param offset 私信列表信息进行的分页，偏移量
     * @param limit 分页限制
     * @return
     */
    List<Message> selectConversations(int userId,int offset,int limit);

    /**
     * 查询当前的用户的会话数量
     * @param userId 当前的用户的id
     * @return
     */
    int selectConversationCount(int userId);

    /**
     * 查询某个会话所包含的消息列表
     * @param conversationId 当前查看的会话里面的信息列表
     * @param offset 偏移量
     * @param limit 分页的限制
     * @return
     */
    List<Message> selectLetters(String conversationId,int offset,int limit);

    /**
     * 查询某个会话所包含的私信的数量
     * @param conversationId 当前的会话的id
     * @return
     */
    int selectLetterCount(String conversationId);

    /**
     * 查询未读的私信的数量
     * @param userId 必有，查询当前的用户的所有会话的未读数量
     * @param conversationId 不一定有，有的话就查询当前会话的里面的信息的未读数量
     * @return
     */
    int selectLetterUnreadCount(int userId,String conversationId);

    /**
     * 发送私信，添加信息
     * @param message  私信的内容
     * @return
     */
    int insertMessage(Message message);

    /**
     * 点击进入会话的时候，消息变成 已读 状态
     * @param ids 消息的id，会话里面可能一下子发送了 很多条 未读的消息
     * @param status 消息状态  1——已读状态
     * @return
     */
    int updateStatus(List<Integer> ids, int status);

    /**
     * 查询某一个主题下的最新的通知
     * @param userId 用户的id
     * @param topic 主题
     * @return
     */
    Message selectLatestNotice(int userId,String topic);

    /**
     * 查询某一个主题所包含的通知数量
     * @param userId 用户id
     * @param topic 主题
     * @return
     */
    int selectNoticeCount(int userId,String topic);

    /**
     * 查询未读的通知数量
     * @param userId 用户id
     * @param topic 主题
     * @return
     */
    int selectNoticeUnreadCount(int userId,String topic);

    /**
     * 查询某一个主题所包含的列表
     * @param userId 用户的id
     * @param topic 主题
     * @param offset 偏移量
     * @param limit 每一页限制数量
     * @return
     */
    List<Message> selectNotices(int userId,String topic,int offset,int limit);
}
